package com.sport.model.excel.annotation;




import com.sport.model.excel.fieldtype.FieldType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//元注解,指定注解可以应用于哪些元素
@Target({ElementType.FIELD,ElementType.METHOD})
//元注解,指定注解在运行时保留,以便程序在运行期间可以访问和处理注解
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelField {

    /**
     * 导出字段名(默认调用当前字段的get方法,若导出字段为对象,对象名.对象属性
     * @return
     */
    String attrName() default " ";

    /**
     *
     * 导出字段标题(需要添加批注请用"*"分隔,例如:标题**批注)
     * @return
     */
    String title();

    /**
     * 字段类型(0:导入导出; 1:仅导出; 2:仅导入)
     * @return
     */
    Type type() default Type.ALL;

    public enum Type{
        ALL(0),
        EXPORT(1),
        IMPORT(2);

        private final int value;
        Type(int value){
            this.value=value;
        }
        public int value(){
            return this.value;
        }
    }

    /**
     * 导出字段对齐方式(0:自动; 1:靠左; 2:居中; 3:靠右)
     * @return
     */
    Align align() default Align.AUTO;

    public enum Align{
        AUTO(0),
        LEFT(1),
        CENTER(2),
        RIGHT(3);
        private final int value;
        Align(int value){
            this.value=value;
        }
        public int value(){
            return this.value;
        }
    }

    /**
     * 指定导出列宽
     * (以字符宽度的1/256为单位,假如你想显示5个字符的话,就可以设置5*256,1个汉字占2个字符)
     */
    int width() default -1;
    /**
     * 指定导出列宽可以显示的字符个数(words*256=width,1个汉字占两个字符)
     */
    int words() default -1;
    /**
     * 导出字段排序(升序)
     */
    int sort() default 0;
    /**
     * 导入时指定列索引(从0开始) 在指定读取excel中的指定的列时使用
     */
    int column() default -1;

    /**
     * 如果是字典类型,设置字典的type值
     * 可以对字段的值进行字典映射
     */
    String dictType() default "";
    /**
     * 反射类型
     */
    Class<? extends FieldType> fieldType() default FieldType.class;

    /**
     * 数值格式（例如：数值：0.00；日期：yyyy-MM-dd；金额：￥#,##0.00）
     */
    String dataFormat() default "";

    /**
     * 字段归属组（针对每一种业务的导入导出） imp ，exp
     * 以便根据业务需求对字段进行灵活的归类和控制，选择性地使用字段
     * @return
     */
    String[] groups() default{};
}
